# -*- coding:utf-8 -*-
#  什么是异常
"""
* 异常即是一个事件，该事件会在程序执行过程中发生，影响了程序的正常执行。

* 一般情况下，在Python无法正常处理程序时就会发生一个异常。

* 异常是Python对象，表示一个错误。

* 当Python脚本发生异常时我们需要捕获处理它，否则程序会终止执行。
"""


#  异常处理
"""
捕捉异常可以使用try/except语句。

try/except语句用来检测try语句块中的错误，从而让except语句捕获异常信息并处理。

如果你不想在异常发生时结束你的程序，只需在try里捕获它。
"""
# 注意：except后面跟不同的异常名称，只会捕获与异常名称，
# 相同的异常，如果不跟异常名称，则可以捕获所有异常
# 如果尝试执⾏的代码的异常类型和要捕获的异常类型不⼀致，则⽆法捕获异常。
# try 捕获异常   except 处理异常

# 捕获IndexError异常
# try:
#     # 可能会发生错误的语句
#     li = [1, 2, 3, 4, 5]
#     print(li[8])            # IndexError: list index out of range
#     print(name)            # 不能捕获这个，由于except后的异常名是IndexError
# except IndexError as e:      # 🍁这里的as是把异常赋值给e,而不是取别名
#     print(IndexError)
#     print(e)
#     #  发生错误后执行的语句
#     print("上面的代码出错了")
#
#
# # print(name)
# print("代码执行结束")


# 捕获TypeError异常
# try:
#     print(1 + "10")
# except TypeError as e:
#     print(e)


# 🍁语法报错是无法捕获的
# try:
#     print(1+1)；
# except SyntaxError as e:
#     print(e)


# def func():
#     print(1 + 1)；    # 🍁语法报错是最严重的一种报错，无论怎样都会报错


# print("代码结束执行")
# print(1 + 1)；


# 捕获多个异常
# try:
#      print(1/0)
# except (NameError, ZeroDivisionError):
#      print('有错误')


# 异常的else
# else表示的是如果没有异常要执⾏的代码。
# 如果try里面有异常，且成功捕获，则不执行,
# except如果执行，else就不执行，反之亦然。
# try:
#     print(name)
# except:
#     print("代码有问题")
# else:
#     print("代码结束运行")


# 异常的finally
# finally表示的是⽆论是否异常都要执⾏的代码，例如关闭⽂件。
# try:
#     print(1+"10")
# finally:
#     print("代码结束执行")


# 所有异常都捕获，并把捕获到的异常打印输出使用Exception
try:
   pass
except Exception as e:
    print(e)
